<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    //一. 算术运算符的隐式类型转换  (+ - * /  %)
    // string -> number  
    // a. 字符串遇到 + 会拼接形成新的字符串
    // b. 字符串遇到 - * / %  会直接转化为数字
    //    (1)  纯数字类型的字符串  => 数字         "10"
    //    (1)  非纯数字类型的字符串  => NaN        "10a"

    // boolean -> number 
    // true  => 1
    // false => 0

    // null 和 undefined  转数字 
    // null => 0
    // undefined =>  NaN

    //二. 关系运算符的隐式类型转换  (> >=  < <=   == ===)
    // 1. 字符串,布尔值 和 数字比较时,会先隐式的转化为数字 , 再比较
    // 2. 字符串和字符串比较时, 按照从左到右的顺序依次比较 ASCII码表(美国标准信息交换码)的大小
    // 3. null 和 undefined  在比较时
    //    (1)   null 和 undefined  遇到  > >= < <=  先转化为数字,再比较
    //    (2)   null 和 undefined  遇到  ==  !=    不会发生转化(没有可比性)  直接比较

    // 4. null和undefined 在数值上是相等的

    // 5. NaN和任何值都不相等   NaN != NaN


    //  1. 字符串,布尔值 和 数字比较时,会先隐式的转化为数字 , 再比较
    // console.log(5 > 3); // true
    // console.log("5" > 3); // "5" => 5  > 3  => true
    // console.log("5a" > 3); // "5a" =>  NaN > 3 
    // console.log("5a" < 3); // "5a" =>  NaN < 3 
    // console.log("5a" == 3); // "5a" =>  NaN == 3
    // console.log(NaN == NaN); 

    // console.log(true > 3);  // true => 1 > 3 => false
    // console.log(true == 1);  // true => 1  == 1  => true
    // console.log(false == 0);  // false => 0  == 0  => true

    // console.log(true == 2);  // true => 1  == 2 => false

    // 2. 
    // 0-9  => 48 - 57
    // A-Z  => 65 - 90
    // a-z  => 97 - 122
    // console.log("5" > "3"); // true   ASCII: 53 > 51  => true
    // console.log("5" > "12"); // true  ASCII: 53 > 49  => true

    // console.log("15" > "12"); // true  ASCII: 53 > 50  => true
    // console.log("15" > "1");  // true  ASCII: 53 > 49  => true

    // console.log("A" > "9");  // ASCII:  64 > 57 

    // 3. null 和 undefined  在比较时
    //    (1)   null 和 undefined  遇到  > >= < <=  先转化为数字,再比较
    //    (2)   null 和 undefined  遇到  ==  !=    不会发生转化(没有可比性)  直接比较

    // console.log(null > 1);  // null => 0  > 1 => false
    // console.log(null > -1);  // null => 0  > -1 => true

    // console.log(undefined > 1);  //  undefined => NaN > 1 => false


    // console.log(null >= 0); // null => 0 >= 0 => true
    // console.log(null == 0); // null == 0  没有可比性 => false

    // console.log(undefined == 0); // undefined == 0  没有可比性 => false



    // 4. null和undefined 在数值上是相等的
    // var a = null;
    // var b; // undefined
    console.log(null == undefined);
    console.log(null === undefined);

    var a, b;
    console.log(a == b); // undefined == undefined





  </script>
</body>

</html>